21.8 Beispiel einer MDI-Anwendung  
Das folgende Beispiel enthält einige der vorher besprochenen Elemente. Der Code beschränkt sich auf das Wesentliche und weist über die MDI-typischen Anweisungen keine weiteren Funktionalitäten auf.
Das Hauptmenü enthält zwei Menüelemente: Datei und Fenster. Datei hat ein Untermenü mit den beiden Punkten Neu und Beenden. Fenster ist nach dem Start der Anwendung deaktiviert und wird erst beim Öffnen des ersten Subfensters aktiviert. Falls zur Laufzeit alle Subfenster geschlossen werden, muss Fenster auch wieder deaktiviert werden. Wir erreichen das, indem wir den dazu erforderlichen Code bei Auslösung des Ereignisses MdiChildActivate, das nicht nur bei der Aktivierung, sondern zusätzlich auch beim Schließen eines Subfensters auftritt, ausführen. Im Ereignishandler wird die Eigenschaft ActiveMdiChild überprüft: Sie liefert Nothing, wenn kein Subfenster geöffnet.
Das Schließen des MDI-Haupt- und der MDI-Subfenster erfordert die ausdrückliche Bestätigung des Anwenders. Das ist in den Ereignissen FormClosing codiert. Beachten Sie, dass bei einem vom Hauptfenster eingeleiteten Schließvorgang ein geöffnetes Subfenster in jedem Fall noch die Möglichkeit hat, das Schließen zu verhindern.
Das Subfenster hat eine Menüleiste mit den Elementen Datei und Bearbeiten. Die beiden Datei-Menüs sollen zur Laufzeit in der Weise zusammengeführt werden, dass das des Subfensters das des Hauptfensters ergänzt. Darüber hinaus sollen die einzelnen Menüelemente nicht nur dem Untermenü angehängt, sondern konventionsgemäß platziert werden, d. h. zuerst Neu, dann Speichern und Speichern unter und zum Schluss Beenden. Erreicht wird das durch die entsprechenden Einstellungen im Eigenschaftsfenster.
Das Menü Bearbeiten, das zur Menüleiste des Subfensters gehört, soll sich zwischen Datei und Fenster im Hauptfenster positionieren. Auch das wird durch die dazu erforderlichen Eigenschaftseinstellungen im Eigenschaftsfenster bewirkt.
Einen Nebeneffekt werden Sie feststellen, wenn Ihr Subfenster eine Menüleiste hat: Nach dem Zusammenführen wird im Subfenster auch dann die Menüleiste angezeigt, wenn sie aufgrund des Zusammenführens leer ist. Hier hilft nur eine Maßnahme: Legen Sie für das ToolStripMenu-Objekt Visible=True fest.
 Hier klicken, um das Bild zu Vergrößern
Abbildung 21.3 Ausgabe des Beispiels »MdiDemo«
| ' ----------------------------------------------------------
|
| ' Beispiel: ...\Kapitel 21\MdiDemo
|
| ' ----------------------------------------------------------
|
| Public Class Form1
|
| Private documentCounter As Integer = 0
|
| Private Sub ArrangeSubWindows(ByVal sender As Object, _
|
| ByVal e As EventArgs) _
|
| Handles mnuUntereinander.Click, _
|
| mnuUeberlappend.Click, _
|
| mnuNebeneinander.Click
|
| If (sender Is mnuUeberlappend) Then
|
| Me.LayoutMdi(MdiLayout.Cascade)
|
| ElseIf (sender Is mnuUntereinander) Then
|
| Me.LayoutMdi(MdiLayout.TileHorizontal)
|
| Else
|
| Me.LayoutMdi(MdiLayout.TileVertical)
|
| End If
|
| End Sub
|
| Private Sub mnuNeu_Click(...) Handles mnuNeu.Click
|
| Me.documentCounter += 1
|
| Dim frm As Document = New Document()
|
| frm.MdiParent = Me
|
| frm.Text = "Dokument " & documentCounter
|
| frm.Show()
|
| mnuFenster.Enabled = True
|
| End Sub
|
| Private Sub Form1_MdiChildActivate(...) _
|
| Handles MyBase.MdiChildActivate
|
| ' wenn kein Subfenster aktiv ist, das Menü 'Fenster'
|
| ' deaktivieren
|
| If Me.ActiveMdiChild Is Nothing Then
|
| Me.mnuFenster.Enabled = False
|
| End If
|
| End Sub
|
| Private Sub Form1_FormClosing(...) Handles MyBase.FormClosing
|
| Dim strMeldung As String = "Wollen Sie die Anwendung beenden?"
|
| Dim dr As DialogResult = MessageBox.Show(strMeldung, _
|
| Application.ProductName, _
|
| MessageBoxButtons.YesNo)
|
| If dr = Windows.Forms.DialogResult.No Then
|
| e.Cancel = True
|
| End If
|
| End Sub
|
| End Class
|
|